//
//  MyLayout.m
//  waterfall-test
//
//  Created by Song on 2018/6/20.
//  Copyright © 2018年 Song. All rights reserved.
//

#import "MyLayout.h"

@implementation MyLayout {
    // 自定义的布局配置数组
    NSMutableArray *_attributeArray;
}

// 数组的相关设置在这个方法中
// 布局前的准备会调用这个方法
-(void)prepareLayout {
    [super prepareLayout];
    
    _attributeArray = [[NSMutableArray alloc] init];
    
    // 静态的2列
    
    // 计算每一个item的宽度   minimumInteritemSpacing:列与列之间的间距最小距离
    float WIDTH = (320 - self.sectionInset.left - self.sectionInset.right - self.minimumInteritemSpacing)/2;
    
    // 定义数组保存每一列的高度
    // 这个数组的主要作用是 保存每一列的总高度，这样在布局时，我们可以始终将下一个item放在最短的列下面
    CGFloat colHight[2] = {self.sectionInset.top,self.sectionInset.bottom};
    
    // itemCount是外界传进来的item的个数 遍历来设置每一个item的布局
    for (int i = 0; i<_itemCount; i++) {
        
        // 设置每个item的位置等相关属性
        NSIndexPath *index = [NSIndexPath indexPathForItem:i inSection:0];
        // 创建一个布局属性类，通过indexPath来创建
        UICollectionViewLayoutAttributes *attris = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:index];
        //随机一个高度 在40——190之间
        CGFloat hight = arc4random()%150 + 40;
        
        // 哪一列高度小，就放到哪一列的下面
        // 标记最短的列
        int widthFlag = 0;
        if (colHight[0] < colHight[1]) {
            //将新的item高度加入到短的一列
            colHight[0] = colHight[0] + hight + self.minimumLineSpacing; // 行与行之间的间距最小距离
            widthFlag = 0;
        }else {
            colHight[1] = colHight[1] + hight + self.minimumLineSpacing;
            widthFlag = 1;
        }
        
        // 设置item的位置
        CGFloat xxx = self.sectionInset.left + (self.minimumInteritemSpacing + WIDTH) * widthFlag; // 利用widthFlag 的0或1，判断是否加上宽度和间距。
        CGFloat yyy = colHight[widthFlag] - hight - self.minimumLineSpacing; // 此时的colHight[widthFlag] 是算上了自身的高度及间距的。所以要减去。
        attris.frame = CGRectMake(xxx, yyy, WIDTH, hight);
        [_attributeArray addObject:attris];
    }
    
    // 设置itemSize来确保滑动范围的正确 这里是通过将所有的item高度平均化，计算出来的(以最高的列位标准)
    if (colHight[0] > colHight[1]) {
        self.itemSize = CGSizeMake(WIDTH, (colHight[0] - self.sectionInset.top) * 2 / _itemCount - self.minimumLineSpacing);
        NSLog(@"height0 = %f",(colHight[0] - self.sectionInset.top) * 2 / _itemCount - self.minimumLineSpacing);
        NSLog(@"0 = %f",colHight[0] - self.sectionInset.top);
    }else{
        self.itemSize = CGSizeMake(WIDTH, (colHight[1] - self.sectionInset.top) * 2 / _itemCount - self.minimumLineSpacing);
        NSLog(@"height1 = %f",(colHight[1] - self.sectionInset.top) * 2 / _itemCount - self.minimumLineSpacing);
        NSLog(@"1 = %f",colHight[1] - self.sectionInset.top);
    }
    
    NSLog(@"%f",colHight[0]);
    NSLog(@"%f",colHight[1]);
}

// 这个方法中返回我们的布局数组
-(NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
    return _attributeArray;
}

@end
